Webã¢ããªã®ãªãªãžã³å ã§éé¢ããããã©ã«ã管çãå¯èœã«ãã匷åãªAPIãããã³ããšã³ã ãªãªãžã³ ãã©ã€ããŒã ãã£ã¬ã¯ããªïŒOPFSïŒãæ¢æ±ããŸããã¢ãã³Webéçºã«ããããã®å©ç¹ããŠãŒã¹ã±ãŒã¹ãå®è£ æŠç¥ãåŠã³ãŸãããã
ããã³ããšã³ã ãªãªãžã³ ãã©ã€ããŒã ãã£ã¬ã¯ããªïŒéé¢ããããã©ã«ã管ç
Webã¯å€§ããé²åããããã«äŒŽãããã³ããšã³ãéçºè ã«èª²ããããèŠæ±ãé«ãŸã£ãŠããŸãããã¯ãéçãªãŠã§ããµã€ããæ§ç¯ããã ãã§ãªãããªãã©ã€ã³æ©èœãå®å šãªããŒã¿ã¹ãã¬ãŒãžããããŠé«æ§èœãªãã¡ã€ã«ç®¡çãå¿ èŠãšããé«åºŠãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠããŸããããã§ç»å Žããã®ããWebã¢ããªã±ãŒã·ã§ã³ããªãªãžã³å ã§ãã¡ã€ã«ãæ±ãæ¹æ³ã驿°ããç»æçãªAPIãããã³ããšã³ã ãªãªãžã³ ãã©ã€ããŒã ãã£ã¬ã¯ããªïŒOPFSïŒã§ãããã®ããã°èšäºã§ã¯ãOPFSã®åãçè§£ããæŽ»çšããããã®å æ¬çãªã¬ã€ããæäŸããŸãã
Origin Private File SystemïŒOPFSïŒãšã¯äœãïŒ
Origin Private File SystemïŒOPFSïŒã¯ãFile System Access APIãžã®åŒ·åãªæ°æ©èœã§ããWebã¢ããªã±ãŒã·ã§ã³ã®ãªãªãžã³å ã«ãå°çšã®ãã©ã€ããŒãã§éé¢ãããã¹ãã¬ãŒãžé åãæäŸããŸããããã¯ãWebã¢ããªã±ãŒã·ã§ã³ããã®ã¿ã¢ã¯ã»ã¹å¯èœãªãå®å šã§ãµã³ãããã¯ã¹åããããã©ã«ããšèããããšãã§ãã`localStorage`ãå€ãFile System APIã®ãããªåŸæ¥ã®ãã©ãŠã¶ã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãšæ¯èŒããŠãã¯ããã«åªããããã©ãŒãã³ã¹ãšæ©èœãæäŸããŸãã
OPFSã®äž»ãªç¹åŸŽïŒ
- éé¢ãããã¹ãã¬ãŒãžïŒ OPFSå ã«ä¿åãããããŒã¿ã¯ããããäœæããã¢ããªã±ãŒã·ã§ã³ããã®ã¿ã¢ã¯ã»ã¹å¯èœã§ããããã©ã€ãã·ãŒãšã»ãã¥ãªãã£ãä¿èšŒãããŸãã
- 髿§èœïŒ OPFSã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã¡ã€ã«ã·ã¹ãã ãšçŽæ¥çµ±åãããŠãããä»ã®ä»£æ¿ææ®µãšæ¯èŒããŠå€§å¹ ã«é«éãªèªã¿æžãé床ãå®çŸããŸãã
- 匷åãããæ©èœïŒ ã©ã³ãã ã¢ã¯ã»ã¹èªã¿æžããã¹ããªãŒãã³ã°ããã£ã¬ã¯ããªæäœãšãã£ãæäœããµããŒãããåŸæ¥ã®ãã¡ã€ã«ã·ã¹ãã ã®æ©èœãæš¡å£ããŠããŸãã
- ãªãã©ã€ã³ã¢ã¯ã»ã¹ïŒ éçºè ã¯ãªãã©ã€ã³ã§ãã·ãŒã ã¬ã¹ã«æ©èœããWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããããè±ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
ãªãOPFSã䜿çšããã®ãïŒWebéçºã«ãããå©ç¹
OPFSã¯ãç¹ã«ããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒãå ç¢ãªãã¡ã€ã«ç®¡çæ©èœãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãçŸä»£ã®Webéçºã«ãããŠéåžžã«é åçãªå©ç¹ãæäŸããŸããããã§ã¯ããã®äž»ãªå©ç¹ã詳ããèŠãŠãããŸãããã
1. ããã©ãŒãã³ã¹ã®åäž
OPFSã®æãéèŠãªå©ç¹ã®äžã€ã¯ããã®ããã©ãŒãã³ã¹ã®åäžã§ããåºç€ãšãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã¡ã€ã«ã·ã¹ãã ãšçŽæ¥ããåãããããšã§ãOPFSã¯JavaScriptã§ãã¡ã€ã«ã·ã¹ãã æäœããšãã¥ã¬ãŒãããéã®ãªãŒããŒããããåé¿ããŸããããã«ããã以äžã®ããšãå¯èœã«ãªããŸãã
- ãã¡ã€ã«èªã¿æžãã®é«éåïŒ å€§å®¹éãã¡ã€ã«ãã¡ãã£ã¢ã¢ã»ããããŸãã¯é »ç¹ãªããŒã¿æŽæ°ãæ±ãéã«äžå¯æ¬ ã§ãã
- ã¬ã€ãã³ã·ã®åæžïŒ ã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã匷åããŸãã
- ãªãœãŒã¹å©çšã®æé©åïŒ ãã©ãŠã¶ã®ãªãœãŒã¹ãè§£æŸããããã¹ã ãŒãºãªæäœãšå šäœçãªã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ã®åäžã«ã€ãªãããŸãã
åçç·šéã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸããããç»åããŒã¿ãåžžã«ã¡ã¢ãªã«èªã¿èŸŒãã§æäœããïŒããã¯é ããã¡ã¢ãªã倧éã«æ¶è²»ããå¯èœæ§ããããŸãïŒä»£ããã«ãOPFSã䜿çšãããšããŠãŒã¶ãŒã®ããã€ã¹äžã§ç»åãã¡ã€ã«ãå¹ççã«ä¿åããã³å€æŽã§ããŸããç»åå šäœãåæã«ã¡ã¢ãªã«ä¿æããããšãªãã倿Žããã¡ã€ã«ã«ã¹ããªãŒãã³ã°ã§ããŸãã
2. ã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒã®åŒ·å
OPFSã¯ãå®å šã§éé¢ãããã¹ãã¬ãŒãžç°å¢ãæäŸããŸããããã¯ä»¥äžã®ããšãæå³ããŸãã
- ããŒã¿ã®éé¢ïŒ ä»ã®ãŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³ã¯ãããªãã®ã¢ããªã±ãŒã·ã§ã³ã®OPFSã«ä¿åãããŠããããŒã¿ã«ã¢ã¯ã»ã¹ã§ããªããããäžæ£ã¢ã¯ã»ã¹ãããŒã¿æŒæŽ©ãé²ããŸãã
- ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒããã®ä¿è·ïŒ OPFSã¯ä»ã®ãªãªãžã³ããã®ã¹ã¯ãªããã«çŽæ¥å ¬éãããŠããªããããXSSæ»æã®ãªã¹ã¯ãäœæžããŸãã
- æ©å¯ããŒã¿ã®å®å šãªä¿ç®¡ïŒ ãŠãŒã¶ãŒçæã³ã³ãã³ããã¢ããªã±ãŒã·ã§ã³èšå®ããŸãã¯ãã®ä»ã®æ©å¯æ å ±ãå®å šã«ä¿ç®¡ããã®ã«é©ããŠããŸããããã¯ç¹ã«ãéèããŒã¿ãå»çèšé²ããã®ä»ã®å人æ å ±ãæ±ãã¢ããªã±ãŒã·ã§ã³ã«æçšã§ãããäžçäžã®ããŒã¿ãã©ã€ãã·ãŒèŠå¶ãéµå®ããã®ã«åœ¹ç«ã¡ãŸãã
3. å ç¢ãªãªãã©ã€ã³æ©èœ
OPFSã¯ãåªãããªãã©ã€ã³æ©èœãæã€PWAãæ§ç¯ããããã®ã²ãŒã ãã§ã³ãžã£ãŒã§ããããã«ããã以äžã®ããšãå¯èœã«ãªããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¢ã»ããã®ãªãã©ã€ã³ä¿åïŒ HTMLãCSSãJavaScriptãç»åãªã©ã®éçã¢ã»ããããã£ãã·ã¥ããŠãã€ã³ã¿ãŒãããæ¥ç¶ããªããŠãå³åº§ã«èªã¿èŸŒããããã«ããŸãã
- ãŠãŒã¶ãŒçæã³ã³ãã³ãã®ãã£ãã·ã¥ïŒ ãŠãŒã¶ãŒããŒã¿ãããã¥ã¡ã³ãããã®ä»ã®ãã¡ã€ã«ãããŒã«ã«ã«ä¿åãããªãã©ã€ã³ã§ã¢ã¯ã»ã¹ã§ããããã«ããŸããããã¯ãã¡ã¢ã¢ããªããªãã©ã€ã³ããã¥ã¡ã³ããšãã£ã¿ãããã«ã¯ãããã¯ãŒã¯æ¥ç¶ãäžå®å®ãªå°åã§åäœããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- ã·ãŒã ã¬ã¹ãªãªãã©ã€ã³äœéšã®æäŸïŒ ãŠãŒã¶ãŒã¯ã€ã³ã¿ãŒãããæ¥ç¶ã«é¢ä¿ãªããã¢ããªã±ãŒã·ã§ã³ãšã®å¯Ÿè©±ãç¶ããããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸããäŸãã°ãæ è¡ã¢ããªã§ããŠãŒã¶ãŒãæ°ããåœãæ¢çŽ¢äžã«ãªãã©ã€ã³ã§ãå°å³ãæ çšã«ã¢ã¯ã»ã¹ã§ãããããªå ŽåãèããŠã¿ãŠãã ããã
4. ãã¡ã€ã«ç®¡çæ©èœã®åäž
OPFSã¯ãåŸæ¥ã®ãã©ãŠã¶ã¹ãã¬ãŒãžã¡ã«ããºã ãšæ¯èŒããŠãããå¹ççã§åççãªãã¡ã€ã«åŠçæ¹æ³ãæäŸããŸãããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã§éçºè ãæ £ã芪ããã§ãããã®ã«è¿ããã¡ã€ã«ããã³ãã£ã¬ã¯ããªæäœæ©èœãæäŸããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- äœæãèªã¿åããæŽæ°ãåé€ïŒCRUDïŒæäœïŒ æšæºçãªãã¡ã€ã«æäœãå¹ççã«å®è¡ããŸãã
- ãã£ã¬ã¯ããªç®¡çïŒ OPFSå ã§ãã£ã¬ã¯ããªãäœæãåé€ãäžèŠ§è¡šç€ºããŸãã
- ã¹ããªãŒãã³ã°ïŒ 倧容éãã¡ã€ã«ãæé©ã«æ±ãããããã¡ã€ã«ãšã®éã§ããŒã¿ãã¹ããªãŒãã³ã°ããŸããããã¯ããããªãšãã£ã¿ããªãŒãã£ãªããã»ããµããã®ä»ã®å€§èŠæš¡ãªã¡ãã£ã¢ãã¡ã€ã«ãæ±ãã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã
OPFSã®ãŠãŒã¹ã±ãŒã¹
OPFSã¯å€çšéã§ãããå¹ åºãWebã¢ããªã±ãŒã·ã§ã³ã·ããªãªã«é©çšã§ããŸãã以äžã«ããã€ãã®äž»èŠãªãŠãŒã¹ã±ãŒã¹ã瀺ããŸãã
1. ããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒ
PWAã¯ãWebãã©ãŠã¶å ã§ã¢ããªã®ãããªäœéšãæäŸããããã«èšèšãããŠããŸããOPFSã¯ã以äžã®ãããªPWAã®æ©èœã匷åããã®ã«çæ³çã§ãã
- ãªãã©ã€ã³ãã¡ãŒã¹ãæŠç¥ïŒ ã¢ããªã±ãŒã·ã§ã³ããŒã¿ãšã¢ã»ãããããŒã«ã«ã«ä¿åããã€ã³ã¿ãŒãããæ¥ç¶ããªããŠãã·ãŒã ã¬ã¹ãªäœéšãæäŸããŸãããŠãŒã¶ãŒãã¬ãã¹ã³ãããŠã³ããŒãããŠãªãã©ã€ã³ã§ç·Žç¿ã§ããèšèªåŠç¿ã¢ããªãæ³åããŠã¿ãŠãã ããã
- ããã©ãŒãã³ã¹ã®åäžïŒ OPFSã¯PWAã®èªã¿èŸŒã¿ãšå®è¡ãé«éåããããå¿çæ§ãé«ãé åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åŒ·åïŒ ããã¥ã¡ã³ããç»åããã®ä»ã®ãŠãŒã¶ãŒçæã³ã³ãã³ããžã®ãªãã©ã€ã³ã¢ã¯ã»ã¹ãªã©ã®ãªãããªæ©èœãæå¹ã«ããããé åçã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšãåµåºããŸãã
2. ç»åã»åç»ãšãã£ã¿
WebããŒã¹ã®ç»åã»åç»ãšãã£ã¿ã¯ãOPFSãã倧ããªæ©æµãåããããšãã§ããŸãã
- èªã¿èŸŒã¿ãšä¿åã®é«éåïŒ OPFSã¯é«éãªèªã¿æžãæäœãå¯èœã«ããç»åãåç»ã®èªã¿èŸŒã¿ãç·šéãä¿åã®ããã©ãŒãã³ã¹ãåäžãããŸãã
- 倧容éãã¡ã€ã«ã®åãæ±ãïŒ å€§å®¹éã®ã¡ãã£ã¢ãã¡ã€ã«ãOPFSã«çŽæ¥ã¹ããªãŒãã³ã°ããããšã§ãã¡ã¢ãªæ¶è²»ãåæžããå¿çæ§ãé«ããŸããããã«ããããŠãŒã¶ãŒã¯ãã©ãŠã¶ã®ããã©ãŒãã³ã¹ã®ããã«ããã¯ãªãã«é«è§£å床ã®ç»åãåç»ãæ±ãããšãã§ããŸãã
- ã¡ãã£ã¢ã¢ã»ããã®ããŒã«ã«ä¿åïŒ ãŠãŒã¶ãŒã¯ãããžã§ã¯ããã¡ãã£ã¢ãã¡ã€ã«ããªãã©ã€ã³ã§ãããŒã«ã«ã«ä¿åã§ããããæè»ã§äŸ¿å©ãªç·šéäœéšãæäŸããŸããããã¯ãæ¥ç¶ç°å¢ãæªãå°åã§ãªã¢ãŒãã¯ãŒã¯ãããŠãããŠãŒã¶ãŒãªã©ãã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãéãããŠãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã
3. ããã¥ã¡ã³ããšãã£ã¿
WebããŒã¹ã®ããã¥ã¡ã³ããšãã£ã¿ã¯ãã¹ãã¬ãŒãžãšããã©ãŒãã³ã¹ã®åäžã®ããã«OPFSãæŽ»çšã§ããŸãã
- ãªãã©ã€ã³ã¢ã¯ã»ã¹ïŒ ãŠãŒã¶ãŒã¯ã€ã³ã¿ãŒãããæ¥ç¶ããªããŠãããã¥ã¡ã³ãã«ã¢ã¯ã»ã¹ããŠç·šéã§ããŸããçŸå Žã§èšäºãå·çããŠãããžã£ãŒããªã¹ããèããŠã¿ãŠãã ããã
- ããŒã«ã«ã¹ãã¬ãŒãžïŒ ããã¥ã¡ã³ãã¯OPFSã«ããŒã«ã«ä¿åããããããã¯ã©ãŠãã¹ãã¬ãŒãžã ãã«äŸåããå¿ èŠããªããªãããããã¯ãŒã¯é å»¶ã®åœ±é¿ãæå°éã«æããŸãã
- ããŒãžã§ã³ç®¡çïŒ ããŒã«ã«ã§ã®ããŒãžã§ã³ç®¡çãå®è£ ãã以åã®ããã¥ã¡ã³ãããŒãžã§ã³ã«ç°¡åã«æ»ãããšãã§ããŸãã
4. ã²ãŒã ãšã·ãã¥ã¬ãŒã·ã§ã³
WebããŒã¹ã®ã²ãŒã ãã·ãã¥ã¬ãŒã·ã§ã³ã¯ãããŒã¿ç®¡çã«OPFSãå©çšã§ããŸãã
- ã²ãŒã ããŒã¿ã®ããŒã«ã«ä¿åïŒ ã²ãŒã ã®é²è¡ç¶æ³ãèšå®ããŠãŒã¶ãŒããŒã¿ãããŒã«ã«ã«ä¿åããè¿ éãªã¢ã¯ã»ã¹ãšæ°žç¶æ§ã確ä¿ããŸããããã«ããããã¬ã€ã€ãŒãå蚪ãããã³ã«ã²ãŒã ãåéããå¿ èŠããªããªããŸãã
- ã¢ã»ããèªã¿èŸŒã¿ã®æé©åïŒ ãã¯ã¹ãã£ãã¢ãã«ããªãŒãã£ãªãã¡ã€ã«ãªã©ã®ã²ãŒã ã¢ã»ãããOPFSããçŽæ¥èªã¿èŸŒã¿ãèªã¿èŸŒã¿æéãççž®ããããã©ãŒãã³ã¹ãåäžãããŸãã
- ãªãã©ã€ã³ãã¬ã€ïŒ ã²ãŒã ããŒã¿ãšã¢ã»ãããããŒã«ã«ã«ãã£ãã·ã¥ããããšã§ããªãã©ã€ã³ãã¬ã€ãå¯èœã«ããŸãã
5. ããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³
å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãã¢ããªã±ãŒã·ã§ã³ã¯ãOPFSããæ©æµãåããããšãã§ããŸãã
- å¹ççãªããŒã¿ã¹ãã¬ãŒãžïŒ å€§èŠæš¡ãªããŒã¿ã»ãããOPFSã«ä¿åããããé«éãªã¢ã¯ã»ã¹ãšæäœãå®çŸããŸãã
- ãªãã©ã€ã³ããŒã¿ã¢ã¯ã»ã¹ïŒ éèŠãªããŒã¿ãžã®ãªãã©ã€ã³ã¢ã¯ã»ã¹ãå¯èœã«ããŸããäŸãã°ãæ ªåŒååŒã¢ããªã±ãŒã·ã§ã³ã¯ããªãã©ã€ã³åæã®ããã«éå»ã®ããŒã¿ãããŒã«ã«ã«ä¿åã§ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒ OPFSããçŽæ¥ããŒã¿ã«ã¢ã¯ã»ã¹ããããšã§ãã¬ã€ãã³ã·ãåæžããå šäœçãªã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ãåäžãããŸãã
OPFSã®å®è£ ïŒå®è·µã¬ã€ã
OPFSãå®è£ ããã«ã¯ãããã€ãã®éèŠãªã¹ããããå¿ èŠã§ãã以äžã«ãéå§ããããã®ç°¡åãªæŠèŠã瀺ããŸãã
1. æ©èœæ€åº
OPFSã䜿çšããåã«ããã©ãŠã¶ãããããµããŒãããŠãããã確èªããŸãã
if ('showOpenFilePicker' in window) {
// OPFS is supported
// Proceed with implementation
} else {
// OPFS is not supported
// Fallback to alternative storage mechanisms like localStorage or IndexedDB
}
2. OPFSãžã®ã¢ã¯ã»ã¹
OPFSãžã®äž»èŠãªãšã³ããªãã€ã³ã㯠`navigator.storage.getDirectory()` ã¡ãœããã§ãããã®ã¡ãœãã㯠`FileSystemDirectoryHandle` ãªããžã§ã¯ããè¿ããããã¯ã¢ããªã±ãŒã·ã§ã³ã®OPFSã®ã«ãŒããã£ã¬ã¯ããªã衚ããŸãããã¹ãŠã®ãã¡ã€ã«ããã³ãã£ã¬ã¯ããªæäœã¯ããããå§ãŸããŸãã
async function getOPFSRoot() {
try {
const handle = await navigator.storage.getDirectory();
return handle;
} catch (error) {
console.error('Error accessing OPFS:', error);
return null;
}
}
3. ãã¡ã€ã«ã®äœæãšç®¡ç
`FileSystemDirectoryHandle` ã䜿çšããŠããã¡ã€ã«ã®äœæãèªã¿åããæžã蟌ã¿ãåé€ãªã©ã®äžè¬çãªãã¡ã€ã«æäœãå®è¡ã§ããŸãã以äžã¯ãæ°ãããã¡ã€ã«ãäœæããŠããŒã¿ãæžãèŸŒãæ¹æ³ã§ãã
async function writeFile(directoryHandle, fileName, content) {
try {
const fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
const writable = await fileHandle.createWritable();
await writable.write(content);
await writable.close();
console.log("File written successfully:", fileName);
} catch (error) {
console.error("Error writing file:", error);
}
}
async function exampleUsage() {
const root = await getOPFSRoot();
if (root) {
const fileContent = "Hello, OPFS! This is some sample data.";
await writeFile(root, "myFile.txt", fileContent);
}
}
ãã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®OPFSå ã« `myFile.txt` ãšããååã®ãã¡ã€ã«ãäœæããæå®ãããã³ã³ãã³ããæžã蟌ã¿ãŸãã`create: true` ãªãã·ã§ã³ã«ããããã¡ã€ã«ãååšããªãå Žåã«äœæãããããšãä¿èšŒãããŸãããã¡ã€ã«ãæ¢ã«ååšããå Žåã¯äžæžããããŸãã
4. ãã¡ã€ã«ã®èªã¿åã
OPFSãããã¡ã€ã«ãèªã¿åãã®ãåæ§ã«ç°¡åã§ãã
async function readFile(directoryHandle, fileName) {
try {
const fileHandle = await directoryHandle.getFileHandle(fileName);
const file = await fileHandle.getFile();
const content = await file.text();
console.log("File content:", content);
return content;
} catch (error) {
console.error("Error reading file:", error);
return null;
}
}
async function exampleRead() {
const root = await getOPFSRoot();
if (root) {
const content = await readFile(root, 'myFile.txt');
if(content) {
console.log('Read content: ', content);
}
}
}
ãã®ã³ãŒãã¯ãã¡ã€ã«ã®å 容ãååŸããã³ã³ãœãŒã«ã«ãã°ãšããŠåºåããŸãã
5. ãã£ã¬ã¯ããªç®¡ç
OPFSã§ã¯ãã£ã¬ã¯ããªæäœãå¯èœã§ãã
async function createDirectory(directoryHandle, directoryName) {
try {
const newDirectoryHandle = await directoryHandle.getDirectoryHandle(directoryName, { create: true });
console.log("Directory created successfully:", directoryName);
return newDirectoryHandle;
} catch (error) {
console.error("Error creating directory:", error);
return null;
}
}
async function listDirectoryContents(directoryHandle) {
try {
const items = [];
for await (const [name, handle] of directoryHandle) {
items.push({
name: name,
type: handle.kind,
});
}
console.log("Directory contents:", items);
return items;
} catch (error) {
console.error("Error listing directory contents:", error);
return [];
}
}
async function exampleDirectoryOperations() {
const root = await getOPFSRoot();
if (root) {
const newDir = await createDirectory(root, 'myDirectory');
if (newDir) {
await writeFile(newDir, "nestedFile.txt", "Content inside nested directory.");
await listDirectoryContents(root);
}
}
}
ãã®äŸã§ã¯ããã£ã¬ã¯ããªãäœæãããã®ãã£ã¬ã¯ããªå ã«ãã¡ã€ã«ãæžã蟌ã¿ããã®å 容ãäžèŠ§è¡šç€ºããŸãããããã®ãã£ã¬ã¯ããªæäœã«ãããOPFSå ã§ãã¡ã€ã«ãšããŒã¿ãè«ççã«æŽçã§ããŸãã
6. ãšã©ãŒãã³ããªã³ã°ãšãã©ãŒã«ããã¯
å ç¢ãªãšã©ãŒãã³ããªã³ã°ã¯äžå¯æ¬ ã§ãã以äžã®ãããªæœåšçãªåé¡ãåžžã«äºæž¬ããŠãã ããã
- ãã©ãŠã¶ã®äºææ§ïŒ ãŠãŒã¶ãŒã®ãã©ãŠã¶ãOPFSããµããŒãããŠããããšã確èªããŸãã
- æš©éïŒ å¿ èŠã«å¿ããŠæš©éèŠæ±ãåŠçããŸãããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã«OPFSãžã®ã¢ã¯ã»ã¹èš±å¯ãäžããå¿ èŠããããŸãã
- ãã£ã¹ã¯å®¹éã®å¶éïŒ å©çšå¯èœãªãã£ã¹ã¯å®¹éã«æ³šæãããŠãŒã¶ãŒã«é©åãªãã£ãŒãããã¯ãæäŸããŸãã
- ãã¡ã€ã«ã¢ã¯ã»ã¹ãšã©ãŒïŒ ãã¡ã€ã«æäœäžã®æœåšçãªãšã©ãŒãåŠçããããã« `try...catch` ãããã¯ãå®è£ ããŸãã
OPFSããµããŒããããŠããªãå Žåã¯ã`localStorage`ã`IndexedDB`ããããã¯ãªã¢ãŒããµãŒããŒãªã©ã®ä»£æ¿ã¹ãã¬ãŒãžã¡ã«ããºã ã«é©åã«ãã©ãŒã«ããã¯ããŠãã¢ããªã±ãŒã·ã§ã³ã®æ©èœãç¶æããŸããæ©èœæ€åºãšããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãæè¡ãæ€èšããŠãããŸããŸãªãã©ãŠã¶ãããã€ã¹éã§ã®äºææ§ã確ä¿ããæè¡çãªå¥œã¿ãå Žæã«é¢ä¿ãªããäžçäžã®ãã¹ãŠã®ãŠãŒã¶ãŒã«çµ±äžãããäœéšãåµåºããŸãã
OPFSã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
OPFSã®å©ç¹ãæå€§åããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããã
- é©åãªã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ã®éžæïŒ ç¹å®ã®ããŒãºã«å¯ŸããŠOPFSãæé©ãªéžæè¢ã§ããããæ éã«è©äŸ¡ããŸããåçŽãªããŒã¿ã¹ãã¬ãŒãžã«ã¯`localStorage`ã§ååãããããŸãããè€éãªããŒã¿æ§é ã倧éã®ããŒã¿ã«ã¯`IndexedDB`ãäŸç¶ãšããŠé©åãªå ŽåããããŸããOPFSã¯é«æ§èœãªãã¡ã€ã«I/Oãäžå¯æ¬ ãªå Žåã«èŒããŸãã
- ãã¡ã€ã«æäœã®æé©åïŒ éåææäœïŒ`async/await` ãŸã㯠PromisesïŒã䜿çšããŠã¡ã€ã³ã¹ã¬ããããããã¯ããã®ãé¿ããå¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãç¶æããŸãã
- ãã£ã¹ã¯å®¹éã®ç®¡çïŒ ç¹ã«å€§å®¹éãã¡ã€ã«ãæ±ãéã«ã¯ããã£ã¹ã¯å®¹éã®äœ¿çšç¶æ³ã管çããããã®ã·ã¹ãã ãå®è£ ããŸãããŠãŒã¶ãŒã«ããŒã¿ã管çããäžèŠãªãã¡ã€ã«ãåé€ãããªãã·ã§ã³ãæäŸããããšãæ€èšããŸããæç¢ºãªããŒã¿ã©ã€ããµã€ã¯ã«æŠç¥ãå®è£ ããŸãã
- ãŠãŒã¶ãŒæš©éã®åŠçïŒ ãã¡ã€ã«ã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ãå¿ èŠãªçç±ããŠãŒã¶ãŒã«æç¢ºã«äŒããããŒã¿ã®äœ¿ç𿹿³ã«ã€ããŠæç¢ºãªèª¬æãæäŸããŸããããã«ããä¿¡é Œãéžæãããç°ãªãåœã®ããŒã¿ãã©ã€ãã·ãŒèŠå¶ãå°éããªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
- ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ OPFSã«ä¿åããåã«ãåžžã«ãŠãŒã¶ãŒã®å ¥åãšããŒã¿ãæ€èšŒããŸããæœåšçãªã»ãã¥ãªãã£è匱æ§ããä¿è·ããŸããOPFSã¯éé¢ãæäŸããŸãããåªããã»ãã¥ãªãã£æ £è¡ã¯äžå¯æ¬ ã§ãã
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒ OPFSãå©çšã§ããªãå Žåã§ãã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã«èšèšããŸããäºææ§ã®ããã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãžã®ãã©ãŒã«ããã¯ã¡ã«ããºã ãå®è£ ããŸãã
- ãã¹ãïŒ ããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããäžè²«ããåäœãšããã©ãŒãã³ã¹ã確ä¿ããŸãããããã¯ãŒã¯æ¡ä»¶ãããã€ã¹ã®ä»æ§ãèæ ®ããŠã倿§ãªç°å¢ã§ãã¹ããå®è¡ããŸãã
å¶éãšèæ ®äºé
OPFSã¯åŒ·åãªããŒã«ã§ããããã®å¶éãèªèããããšãäžå¯æ¬ ã§ãã
- ãã©ãŠã¶ãµããŒãïŒ OPFSã¯æ¯èŒçæ°ããAPIã§ããããã©ãŠã¶ã®ãµããŒãã¯ç°ãªãå ŽåããããŸããããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŠãã ããã
- ãã£ã¹ã¯å®¹éå¶éïŒ ãã©ãŠã¶ã®å®è£ ã«ãã£ãŠã¯ãã£ã¹ã¯å®¹éå¶éã課ãããå ŽåããããŸããå€ãããŒã¿ãåé€ãããããã¡ã€ã«ãå§çž®ããããããªã©ã容éã广çã«ç®¡çããæŠç¥ãå®è£ ããŠãã ããããããã®å¶éã¯ãã©ãŠã¶ãšãã®èšå®ã«ãã£ãŠç°ãªããŸãã
- ããŒã¿ã®æ°žç¶æ§ïŒ OPFSã«ä¿åãããããŒã¿ã¯æ°žç¶çã§ããããŠãŒã¶ãŒã¯ãã©ãŠã¶ããŒã¿ãæ¶å»ããããšãã§ããæ°žä¹ ã«åç¶ããããšãä¿èšŒãããŠããããã§ã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã®ããã¥ã¡ã³ãã§ãŠãŒã¶ãŒã«ãã®ããšãéç¥ãããŠãŒã¶ãŒãããŒã¿ã®æ°žç¶æ§ãæåŸ ããŠããå Žåã¯ãããŒã¿ãç°¡åã«åããŠã³ããŒããŸãã¯åæã§ããããã«ããŠãã ããã
- ãŠãŒã¶ãŒã®èš±å¯ïŒ ãŠãŒã¶ãŒã¯OPFSãžã®ã¢ã¯ã»ã¹èš±å¯ãäžããå¿ èŠããããŸãã
- ã¯ãã¹ãªãªãžã³ã¢ã¯ã»ã¹äžå¯ïŒ OPFSã«ä¿åãããããŒã¿ã¯ãããªãã®ãªãªãžã³ã«éé¢ãããŠããŸãã
çµè«
ããã³ããšã³ã ãªãªãžã³ ãã©ã€ããŒã ãã£ã¬ã¯ããªïŒOPFSïŒã¯ãWebã¢ããªã±ãŒã·ã§ã³ã«ããããã¡ã€ã«ç®¡çãžã®é©æ°çãªã¢ãããŒããæäŸããŸãããã®ããã©ãŒãã³ã¹äžã®å©ç¹ãã»ãã¥ãªãã£åŒ·åããªãã©ã€ã³æ©èœã«ãããçŸä»£ã®Webéçºã«ãšã£ãŠé åçãªéžæè¢ãšãªã£ãŠããŸããéçºè ã¯ããã®æ©èœãçè§£ãããã¹ããã©ã¯ãã£ã¹ãé©çšãããã®å¶éãèæ ®ããããšã§ãOPFSãæŽ»çšããŠãåè¶ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãã髿§èœã§å®å šããã€æ©èœè±å¯ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããPWAãç»åãšãã£ã¿ãããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ã®ããããäœæããŠããå Žåã§ããOPFSã¯æ°ããã¬ãã«ã®æ©èœãšããã©ãŒãã³ã¹ãè§£ãæŸã€å¯èœæ§ãç§ããŠããŸãããã®æè¡ãåãå ¥ããæ¬¡äžä»£ã®Webäœéšã®æ§ç¯ãå§ããŸãããã
Webãé²åããã«ã€ããŠãå¹ççã§å®å šããã€ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãã¡ã€ã«ç®¡çã®å¿ èŠæ§ã¯ãŸããŸãéèŠã«ãªã£ãŠããŸããOPFSã¯ããããã®èŠæ±ã«å¿ããäžçäžã®Webéçºã®æªæ¥ã圢äœãããã®ããŒã«ãæäŸããŸãããã®ãšããµã€ãã£ã³ã°ãªWebæè¡åéã«ããããããªã鲿©ãšç¶ç¶çãªé©æ°ã«ãæåŸ ãã ããã